#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

#include <iostream>

using namespace std;
// int main()
// {
//   cout << "hello world" << endl;
//   return 0;
// }

// int main() {
//   printf("This is the original program\n");

//   execl("/bin/ls", "ls", "-l", NULL);

//   printf("This is the original program\n");
//   perror("execl");
//   exit(-1);
// }

//------------------------------

// int main() {
//   printf("This is the original program\n");
//   execlp("ls", "ls", "-l", NULL);
//   printf("This is the original program\n");
//   perror("execlp");
//   exit(1);
// }

//------------------------------

// int main() {
//   printf("This is the original program\n");

//   char *env[] = {(char *)"MYVAR=Hello", NULL};

//   execle("/usr/bin/env", "env", NULL, env);

//   printf("This is the original program\n");
//   perror("execle");
//   exit(1);
// }


//------------------------------

// int main() {
//   printf("This is the original program\n");

//   char *args[] = {(char *)"ls", (char *)"-l", NULL};

//   execv("/bin/ls", args);

//   printf("This is the original program\n");

//   perror("execv");
//   return 1;
// }

//------------------------------

// int main() {
//   printf("This is the original program\n");

//   char *args[] = {(char *)"ls", (char *)"-l", NULL};

//   execvp("ls", args);

//   printf("This is the original program\n");

//   perror("execvp");
//   return 1;
// }

//------------------------------

// int main() {
//   printf("This is the original program\n");

//   char *args[] = {(char*)"ls", (char*)"-l", NULL};

//   char *env[] = {(char *)"MYVAR=Hello", NULL};

//   execvpe("ls", args, env);
//   printf("This is the original program\n");

//   perror("execvpe");
//   return 1;
// }

//------------------------------

int main() {
  printf("This is the original program\n");

  char *args[] = {(char *)"ls", (char *)"-l", NULL};

  char *env[] = {(char*)"MYVAR=Hello", NULL};

  execve("/bin/ls", args, env);

  printf("This is the original program\n");
  perror("execve");
  return 1;
}
